// checkout.js
// 导入请求工具
const { get, post } = require('../../utils/request');
const app = getApp();

Page({
  data: {
    selectedAddress: null, // 选中的收货地址
    selectedGoods: [], // 选中的商品列表
    deliveryOptions: [], // 配送方式选项
    selectedDelivery: {}, // 选中的配送方式
    paymentOptions: [], // 支付方式选项
    selectedPayment: {}, // 选中的支付方式
    coupons: [], // 可用优惠券
    availableCouponCount: 0, // 可用优惠券数量
    selectedCoupon: null, // 选中的优惠券
    remark: '', // 订单备注
    goodsTotalPrice: 0, // 商品总价
    discountAmount: 0, // 优惠金额
    finalPrice: 0, // 最终价格
    showDeliveryModal: false, // 是否显示配送方式选择弹窗
    canSubmit: false, // 是否可以提交订单
    minOrderAmount: 29, // 最低起送金额
    minFreeDeliveryAmount: 49 // 免配送费金额
  },

  onLoad: function() {
    // 初始化数据
    this.initData();
  },

  /**
   * 初始化数据
   */
  initData: function() {
    wx.showLoading({
      title: '加载中',
    });

    // 并发请求数据
    Promise.all([
      this.loadSelectedGoods(),
      this.loadDeliveryOptions(),
      this.loadPaymentOptions(),
      this.loadAvailableCoupons(),
      this.loadUserAddress()
    ])
      .then(() => {
        wx.hideLoading();
        // 计算费用
        this.calculateTotalPrice();
        // 检查是否可以提交订单
        this.checkCanSubmit();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('加载数据失败', err);
        wx.showToast({
          title: '加载失败',
          icon: 'none'
        });
      });
  },

  /**
   * 加载选中的商品
   */
  loadSelectedGoods: function() {
    return new Promise((resolve, reject) => {
      get('/api/cart/selected/')
        .then(res => {
          const selectedGoods = res || [];
          this.setData({
            selectedGoods: selectedGoods
          });
          resolve();
        })
        .catch(err => {
          console.error('加载选中商品失败', err);
          reject(err);
        });
    });
  },

  /**
   * 加载配送方式
   */
  loadDeliveryOptions: function() {
    return new Promise((resolve) => {
      // 模拟数据
      const deliveryOptions = [
        {
          id: 1,
          name: '普通配送',
          description: '30-60分钟送达',
          fee: 5
        },
        {
          id: 2,
          name: '极速配送',
          description: '15-30分钟送达',
          fee: 8
        },
        {
          id: 3,
          name: '定时配送',
          description: '选择送达时间',
          fee: 0
        }
      ];
      
      // 默认选中第一个
      const selectedDelivery = deliveryOptions[0];
      
      this.setData({
        deliveryOptions: deliveryOptions,
        selectedDelivery: selectedDelivery
      });
      
      resolve();
    });
  },

  /**
   * 加载支付方式
   */
  loadPaymentOptions: function() {
    return new Promise((resolve) => {
      // 模拟数据
      const paymentOptions = [
        {
          id: 1,
          name: '微信支付'
        },
        {
          id: 2,
          name: '支付宝'
        },
        {
          id: 3,
          name: '银行卡支付'
        }
      ];
      
      // 默认选中第一个
      const selectedPayment = paymentOptions[0];
      
      this.setData({
        paymentOptions: paymentOptions,
        selectedPayment: selectedPayment
      });
      
      resolve();
    });
  },

  /**
   * 加载可用优惠券
   */
  loadAvailableCoupons: function() {
    return new Promise((resolve) => {
      // 模拟数据
      const coupons = [
        {
          id: 1,
          name: '满30减5',
          min_amount: 30,
          discount: 5
        },
        {
          id: 2,
          name: '满50减10',
          min_amount: 50,
          discount: 10
        },
        {
          id: 3,
          name: '免配送费券',
          min_amount: 20,
          discount: 5,
          type: 'delivery'
        }
      ];
      
      const availableCouponCount = coupons.length;
      
      this.setData({
        coupons: coupons,
        availableCouponCount: availableCouponCount
      });
      
      resolve();
    });
  },

  /**
   * 加载用户地址
   */
  loadUserAddress: function() {
    return new Promise((resolve) => {
      // 模拟数据
      const selectedAddress = {
        id: 1,
        name: '张先生',
        phone: '13800138000',
        province: '广东省',
        city: '深圳市',
        district: '南山区',
        detail: '科技园南区科技南十二路2号金蝶软件园'
      };
      
      this.setData({
        selectedAddress: selectedAddress
      });
      
      resolve();
    });
  },

  /**
   * 选择收货地址
   */
  selectAddress: function() {
    wx.navigateTo({
      url: '/pages/address/select'
    });
  },

  /**
   * 显示配送方式选择弹窗
   */
  selectDelivery: function() {
    this.setData({
      showDeliveryModal: true
    });
  },

  /**
   * 隐藏配送方式选择弹窗
   */
  hideDeliveryModal: function() {
    this.setData({
      showDeliveryModal: false
    });
  },

  /**
   * 确认配送方式
   */
  confirmDelivery: function(e) {
    const id = e.currentTarget.dataset.id;
    
    // 查找选中的配送方式
    const selectedDelivery = this.data.deliveryOptions.find(item => item.id === id);
    
    if (selectedDelivery) {
      this.setData({
        selectedDelivery: selectedDelivery,
        showDeliveryModal: false
      });
      
      // 重新计算费用
      this.calculateTotalPrice();
    }
  },

  /**
   * 选择支付方式
   */
  selectPayment: function() {
    wx.showToast({
      title: '暂未实现支付方式选择',
      icon: 'none'
    });
  },

  /**
   * 选择优惠券
   */
  selectCoupon: function() {
    wx.showToast({
      title: '暂未实现优惠券选择',
      icon: 'none'
    });
  },

  /**
   * 输入订单备注
   */
  inputRemark: function() {
    wx.showToast({
      title: '暂未实现订单备注',
      icon: 'none'
    });
  },

  /**
   * 计算费用
   */
  calculateTotalPrice: function() {
    const { selectedGoods, selectedDelivery, selectedCoupon, minFreeDeliveryAmount } = this.data;
    
    // 计算商品总价
    let goodsTotalPrice = 0;
    selectedGoods.forEach(goods => {
      goodsTotalPrice += goods.current_price * goods.num;
    });
    
    // 计算配送费
    let deliveryFee = selectedDelivery.fee;
    // 判断是否免配送费
    if (goodsTotalPrice >= minFreeDeliveryAmount) {
      deliveryFee = 0;
    }
    
    // 计算优惠金额
    let discountAmount = 0;
    if (selectedCoupon) {
      // 判断是否满足优惠券使用条件
      if (goodsTotalPrice >= selectedCoupon.min_amount) {
        discountAmount = selectedCoupon.discount;
      }
    }
    
    // 计算最终价格
    let finalPrice = goodsTotalPrice + deliveryFee - discountAmount;
    // 确保最终价格不小于0
    if (finalPrice < 0) {
      finalPrice = 0;
    }
    
    // 更新选中的配送方式费用
    const updatedSelectedDelivery = {
      ...selectedDelivery,
      fee: deliveryFee
    };
    
    this.setData({
      goodsTotalPrice: goodsTotalPrice.toFixed(2),
      selectedDelivery: updatedSelectedDelivery,
      discountAmount: discountAmount.toFixed(2),
      finalPrice: finalPrice.toFixed(2)
    });
    
    // 检查是否可以提交订单
    this.checkCanSubmit();
  },

  /**
   * 检查是否可以提交订单
   */
  checkCanSubmit: function() {
    const { selectedAddress, selectedGoods, finalPrice, minOrderAmount } = this.data;
    
    // 检查是否有收货地址、选中的商品和最终价格是否达到最低起送金额
    const canSubmit = selectedAddress && 
                      selectedGoods.length > 0 && 
                      parseFloat(finalPrice) >= minOrderAmount;
    
    this.setData({
      canSubmit: canSubmit
    });
  },

  /**
   * 提交订单
   */
  submitOrder: function() {
    if (!this.data.canSubmit) {
      wx.showToast({
        title: '订单信息不完整',
        icon: 'none'
      });
      return;
    }
    
    const { selectedAddress, selectedGoods, selectedDelivery, selectedPayment, selectedCoupon, remark, finalPrice } = this.data;
    
    // 显示加载中
    wx.showLoading({
      title: '提交订单',
    });
    
    // 调用API提交订单
    post('/api/orders/create/', {
      address_id: selectedAddress.id,
      goods: selectedGoods.map(goods => ({
        id: goods.id,
        num: goods.num,
        spec: goods.spec
      })),
      delivery_id: selectedDelivery.id,
      payment_id: selectedPayment.id,
      coupon_id: selectedCoupon ? selectedCoupon.id : null,
      remark: remark,
      total_amount: finalPrice
    })
      .then(res => {
        wx.hideLoading();
        
        // 订单创建成功
        const orderId = res.order_id;
        
        // 清空购物车选中的商品
        this.clearSelectedCartItems().then(() => {
          // 跳转到支付页面
          wx.navigateTo({
            url: `/pages/order/payment?id=${orderId}&amount=${finalPrice}`
          });
        });
      })
      .catch(err => {
        wx.hideLoading();
        console.error('提交订单失败', err);
        wx.showToast({
          title: '提交订单失败',
          icon: 'none'
        });
      });
  },

  /**
   * 清空购物车选中的商品
   */
  clearSelectedCartItems: function() {
    return new Promise((resolve, reject) => {
      post('/api/cart/clear_selected/')
        .then(() => {
          // 更新购物车数量
          app.globalData.cartCount = 0;
          app.updateCartCount();
          resolve();
        })
        .catch(err => {
          console.error('清空购物车选中商品失败', err);
          reject(err);
        });
    });
  }
});